package com.ego.service.impl;

import com.ego.commons.exception.DaoException;
import com.ego.commons.pojo.EasyUIDatagrid;
import com.ego.commons.pojo.EgoResult;
import com.ego.dubbo.service.TBItemCatDubboService;
import com.ego.dubbo.service.TbItemParamDubboService;
import com.ego.pojo.TbItemCat;
import com.ego.pojo.TbItemParam;
import com.ego.pojo.TbItemParamChild;
import com.ego.service.TBItemParamService;
import com.github.pagehelper.PageInfo;
import org.apache.dubbo.config.annotation.DubboReference;
import org.springframework.beans.BeanUtils;
import org.springframework.stereotype.Service;

import java.util.ArrayList;
import java.util.Date;
import java.util.List;

@Service
public class TBItemParamServiceImpl implements TBItemParamService {

    @DubboReference
    private TbItemParamDubboService tbItemParamDubboService;

    @DubboReference
    private TBItemCatDubboService tbItemCatDubboService;

    @Override
    public EasyUIDatagrid itemParmList(int page, int rows) {

        PageInfo<TbItemParam> pageInfo = tbItemParamDubboService.selectTbItemParamByPage(page, rows);

        //获取结果集
        List<TbItemParam> tbItemParams = pageInfo.getList();

        List<TbItemParamChild> tbItemParamChildList = new ArrayList<>();
        //循环数据，分别TbItemParam 的itemCatId 查询出对应的类目名称
        for (TbItemParam tbItemParam : tbItemParams) {
            //创建商品规格参数的子类对象：封装itemCatName 专门为前端独立使用的
            TbItemParamChild tbItemParamChild = new TbItemParamChild();

            //查询对应的商品类目 信息
            TbItemCat tbItemCat = tbItemCatDubboService.selectById(tbItemParam.getItemCatId());

            //设置TbItemParamChild 的类目名称
            tbItemParamChild.setItemCatName(tbItemCat.getName());

            //将一个对象的数据copy另外一个对象中，前提，两个对象中的属性必须相同
            BeanUtils.copyProperties(tbItemParam,tbItemParamChild);


            tbItemParamChildList.add(tbItemParamChild);

        }

        return new EasyUIDatagrid(tbItemParamChildList, pageInfo.getTotal());
    }

    @Override
    public EgoResult itemParamQueryItemCatid(long itemCatId) {
        TbItemParam tbItemParam = tbItemParamDubboService.selectByItemCatId(itemCatId);
        return EgoResult.ok(tbItemParam);
    }

    @Override
    public EgoResult insert(TbItemParam tbItemParam) {

        Date now = new Date();

        tbItemParam.setCreated(now);
        tbItemParam.setUpdated(now);

        try {
            int row = tbItemParamDubboService.insert(tbItemParam);
            if(row==1){
                return EgoResult.ok();
            }else{
                return EgoResult.error("新增商品规格参数失败!");
            }
        } catch (Exception e) {
            e.printStackTrace();
            return EgoResult.error("新增商品规格参数失败!");
        }

    }

    @Override
    public EgoResult deleteByIds(List<Long> ids) {

        try {
            int row = tbItemParamDubboService.deleteByIds(ids);
            if(row==1){
                return EgoResult.ok();
            }
        } catch (DaoException e) {
            e.printStackTrace();
            return EgoResult.error(e.getMessage());
        }
        return EgoResult.error("删除失败");
    }
}
